#ifndef __ZHU_OS_LINUX_GDT_H__
#define __ZHU_OS_LINUX_GDT_H__
#include "linux/types.h"

#pragma pack(2)
typedef struct _gdtr32_data_t 
{
    short limit;
    int base;
} gdtr32_data_t;
#pragma pack()

typedef struct _gdt_item_t
{
    unsigned short limit_low; // low 16 bits of segment limit
    unsigned int base_low: 24; // low 24 bits of segment base address
    unsigned char type: 4; // 段类型
    unsigned char segment : 1; // 1表示代码段或数据段，0表示系统段
    unsigned char DPL: 2; // 描述符特权登记
    unsigned char present: 1; // 存在位
    unsigned char limit_high: 4; // 段界限高4位
    unsigned char available: 1; // 系统保留位
    unsigned char long_mode: 1; // 64位扩展标志
    unsigned char big: 1; // 1表示段是64位段，0表示段是32位段
    unsigned char granularity: 1; // 粒度，0:1B 1：4KB
    unsigned char base_high; // 基址高8位
} __attribute__((packed)) gdt_item_t;

void install_x64_descriptor();

#endif